Enviado em 24/12/2010 - 15:09h
olá pessoal, tenho um codigo aqui fazendo testes com ponteiro, fiz uma coisa que não deveria pelo que aprendi sobre ponteiros...porem o codigo funciona, ainda sim, acredito estar fazendo mau uso, e gostaria de saber as implicações disso.Segue o codigo bem simples:
int *c;// declara o dito
c = (int *)malloc(sizeof(int));// reserva espaco de memoria para a variavel
*c = 10;// atribui valor onde o ponteiro aponta...ok
printf("%i\n",*c);// exibe o valor...ok
c++;// obs 1
*c = 20;// obs 2
printf("%i\n",*c);
c++;
*c = 30;
printf("%i\n",*c);
printf("Voltando...\n");
printf("%i\n",*c);
c--;
printf("%i\n",*c);
c--;
printf("%i\n",*c);
// fim
obs 1: pelo que aprendi, fazer c++ quando c é um ponteiro, incrementa sua localização,ou seja
se c apontava para um endereco 162066464, sera somado o tamanho de um int, e ele passara a apontar para 162066468.
obs 2:até ai tudo bem, o problema e que eu atribui um valor para este endereço de memoria sem ter declarado antes, isso não deveria dar um "access violation" ou qualquer coisa do tipo,já que estou a usar um endereço que não foi previamente requisitado?
neste exemplo tanto o encremento quanto o decremento funcionaram perfeitamente exibindo os valores corretos...
int *c;// declara o dito
c = (int *)malloc(sizeof(int));// reserva espaco de memoria para a variavel
*c = 10;// atribui valor onde o ponteiro aponta...ok
printf("%i\n",*c);// exibe o valor...ok
c++;// obs 1
*c = 20;// obs 2
printf("%i\n",*c);
c++;
*c = 30;
printf("%i\n",*c);
printf("Voltando...\n");
printf("%i\n",*c);
c--;
printf("%i\n",*c);
c--;
printf("%i\n",*c);
// fim
obs 1: pelo que aprendi, fazer c++ quando c é um ponteiro, incrementa sua localização,ou seja
se c apontava para um endereco 162066464, sera somado o tamanho de um int, e ele passara a apontar para 162066468.
obs 2:até ai tudo bem, o problema e que eu atribui um valor para este endereço de memoria sem ter declarado antes, isso não deveria dar um "access violation" ou qualquer coisa do tipo,já que estou a usar um endereço que não foi previamente requisitado?
neste exemplo tanto o encremento quanto o decremento funcionaram perfeitamente exibindo os valores corretos...